﻿// ------------------------------------------------------------------------
// 版权信息
// 版权归重庆虫儿飞科技有限公司所有。
// 所有权利保留。
// 官方网站：https://netokit.com
// 许可证信息
// Neto.Kit 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
// 
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
// 
// 其他重要信息
// Neto.Kit 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Neto.Kit 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
// 
// 更多信息
// 请访问 https://netokit.com 获取更多关于 Neto.Kit 项目的许可证和版权信息。
// ------------------------------------------------------------------------

namespace Neto.PermissionGenerate;

/// <summary>
///     授权控制器
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class, AllowMultiple = true)]
public sealed class PgApiControllerAttribute : PgBaseAttribute
{
    /// <summary>
    ///     构造函数
    /// </summary>
    /// <param name="name">名称(控制器名称/目录名称)</param>
    /// <param name="menuPCode">父Code,如果为空，则默认未Area</param>
    /// <param name="controller"></param>
    /// <param name="area">区域，为空默认使用贴的Area标签的区域</param>
    /// <param name="exPras">扩展字段,[ "Key1=Value1", "Key2=Value2" ]</param>
    public PgApiControllerAttribute(string name, string menuPCode = "", string controller = "", string area = "Api",
        string[] exPras = null)
    {
        Name = name;
        MenuPCode = menuPCode;
        Controller = controller;
        Area = area;
        AddPar(exPras);
    }


    /// <summary>
    ///     菜单类型
    /// </summary>
    public PgType PgType { get; } = PgType.Controller;


    /// <summary>
    ///     名称（控制器、菜单、功能名称）
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    ///     唯一表示代码(默认为:area+下划线+ controller+下划线+页面名字 例如：htadmin_user_index)
    /// </summary>
    public string Code { get; set; }

    /// <summary>
    ///     父Code
    ///     如果为空，则默认未Area
    /// </summary>
    public string MenuPCode { get; set; }

    /// <summary>
    ///     默认Action Code,自动生成，不能修改
    /// </summary>
    public string ActionCode { get; set; }

    /// <summary>
    ///     区域
    /// </summary>
    public string Area { get; set; }

    /// <summary>
    ///     控制器（默认为当前的 Controller,如果手动设置，则为手动设置）
    /// </summary>
    public string Controller { get; set; }

    /// <summary>
    ///     Action,自动生成获取
    /// </summary>
    public string Action { get; set; }

    /// <summary>
    ///     方法/Action名称,多个用英文逗号隔开
    /// </summary>
    public string Actions { get; set; }

    ///// <summary>
    ///// 参数
    ///// </summary>
    //public List<string> Args = new List<string>();


    /// <summary>
    ///     路由
    ///     例如：api/user/index
    ///     例如：HtAdmin/User/Index
    /// </summary>
    public string Route { get; set; }


    /// <summary>
    ///     Url Key/前端Key
    /// </summary>
    public string UrlKey { get; set; }

    /// <summary>
    ///     前端对应URL 地址/代码等
    ///     例如：/user/index
    ///     例如：userIndex
    ///     例如：userEdit
    ///     例如：https://www.baidu.com
    /// </summary>
    public string Url { get; set; }

    /// <summary>
    ///     URL 地址参数(例如：?a=1&b=2)
    /// </summary>
    public string UrlPars { get; set; }


    /// <summary>
    ///     图标（默认图标="layui-icon-component"）
    /// </summary>
    public string Icon { get; set; }

    /// <summary>
    ///     顺序(按从小到大排序)
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    ///     备注
    /// </summary>
    public string Remark { get; set; }

    // /// <summary>
    // ///     打开方式（字典 0 无， 1内链 2外链）
    // ///     Url(例如：HtAdmin/User/Index或https://www.baidu.com/xxxxx)
    // /// </summary>
    // public MenuOpenType OpenType { get; set; }


    #region 开关

    /// <summary>
    ///     是否是菜单Action
    /// </summary>
    public bool IsMenuAction { get; set; }

    /// <summary>
    ///     是否启用
    /// </summary>
    public bool IsEnable { get; set; } = true;

    /// <summary>
    ///     是否菜单显示（默认：true）
    /// </summary>
    public bool IsMenuHide { get; set; }

    /// <summary>
    ///     是否角色显示（默认：true）
    /// </summary>
    public bool IsRoleHide { get; set; }

    /// <summary>
    ///     是否开发用的，如果为true，只有开发账号可以使用
    /// </summary>
    public bool IsDeveloper { get; set; }

    /// <summary>
    ///     是否需要权限
    ///     true:需要权限
    ///     false:开放权限
    /// </summary>
    public bool IsPermission { get; set; } = true;

    #endregion
}